home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / gnu / make_std.tex < prev    next >
Text File  |  1993-07-20  |  20KB  |  523 lines

  1. @comment This file is included by both standards.texi and make.texinfo.
  2. @comment It was broken out of standards.texi on 1/6/93 by roland.
  3.  
  4. @node Makefile Conventions
  5. @chapter Makefile Conventions
  6. @comment standards.texi does not print an index, but make.texinfo does.
  7. @cindex makefile, conventions for
  8. @cindex conventions for makefiles
  9. @cindex standards for makefiles
  10.  
  11. This chapter describes conventions for writing the Makefiles for GNU programs.
  12.  
  13. @menu
  14. * Makefile Basics::
  15. * Utilities in Makefiles::
  16. * Standard Targets::
  17. * Command Variables::
  18. * Directory Variables::
  19. @end menu
  20.  
  21. @node Makefile Basics
  22. @section General Conventions for Makefiles
  23.  
  24. Every Makefile should contain this line:
  25.  
  26. @example
  27. SHELL = /bin/sh
  28. @end example
  29.  
  30. @noindent
  31. to avoid trouble on systems where the @code{SHELL} variable might be
  32. inherited from the environment.  (This is never a problem with GNU
  33. @code{make}.)
  34.  
  35. Don't assume that @file{.} is in the path for command execution.  When
  36. you need to run programs that are a part of your package during the
  37. make, please make sure that it uses @file{./} if the program is built as
  38. part of the make or @file{$(srcdir)/} if the file is an unchanging part
  39. of the source code.  Without one of these prefixes, the current search
  40. path is used.  
  41.  
  42. The distinction between @file{./} and @file{$(srcdir)/} is important
  43. when using the @samp{--srcdir} option to @file{configure}.  A rule of
  44. the form:
  45.  
  46. @smallexample
  47. foo.1 : foo.man sedscript
  48.         sed -e sedscript foo.man > foo.1
  49. @end smallexample
  50.  
  51. @noindent
  52. will fail when the current directory is not the source directory,
  53. because @file{foo.man} and @file{sedscript} are not in the current
  54. directory.
  55.  
  56. When using GNU @code{make}, relying on @samp{VPATH} to find the source
  57. file will work in the case where there is a single dependency file,
  58. since the @file{make} automatic variable @samp{$<} will represent the
  59. source file wherever it is.  (Many versions of @code{make} set @samp{$<}
  60. only in implicit rules.)  A makefile target like
  61.  
  62. @smallexample
  63. foo.o : bar.c
  64.         $(CC) -I. -I$(srcdir) $(CFLAGS) -c bar.c -o foo.o
  65. @end smallexample
  66.  
  67. @noindent
  68. should instead be written as
  69.  
  70. @smallexample
  71. foo.o : bar.c
  72.         $(CC) $(CFLAGS) $< -o $@@
  73. @end smallexample
  74.  
  75. @noindent
  76. in order to allow @samp{VPATH} to work correctly.  When the target has
  77. multiple dependencies, using an explicit @samp{$(srcdir)} is the easiest
  78. way to make the rule work well.  For example, the target above for
  79. @file{foo.1} is best written as:
  80.  
  81. @smallexample
  82. foo.1 : foo.man sedscript
  83.         sed -s $(srcdir)/sedscript $(srcdir)/foo.man > foo.1
  84. @end smallexample
  85.  
  86. @node Utilities in Makefiles
  87. @section Utilities in Makefiles
  88.  
  89. Write the Makefile commands (and any shell scripts, such as
  90. @code{configure}) to run in @code{sh}, not in @code{csh}.  Don't use any
  91. special features of @code{ksh} or @code{bash}.
  92.  
  93. The @code{configure} script and the Makefile rules for building and
  94. installation should not use any utilities directly except these:
  95.  
  96. @example
  97. cat cmp cp echo egrep expr grep
  98. ln mkdir mv pwd rm rmdir sed test touch
  99. @end example
  100.  
  101. Stick to the generally supported options for these programs.  For
  102. example, don't use @samp{mkdir -p}, convenient as it may be, because
  103. most systems don't support it.
  104.  
  105. The Makefile rules for building and installation can also use compilers
  106. and related programs, but should do so via @code{make} variables so that the
  107. user can substitute alternatives.  Here are some of the programs we
  108. mean:
  109.  
  110. @example
  111. ar bison cc flex install ld lex
  112. make makeinfo ranlib texi2dvi yacc
  113. @end example
  114.  
  115. When you use @code{ranlib}, you should test whether it exists, and run
  116. it only if it exists, so that the distribution will work on systems that
  117. don't have @code{ranlib}.
  118.  
  119. If you use symbolic links, you should implement a fallback for systems
  120. that don't have symbolic links.
  121.  
  122. It is ok to use other utilities in Makefile portions (or scripts)
  123. intended only for particular systems where you know those utilities to
  124. exist.
  125.  
  126. @node Standard Targets
  127. @section Standard Targets for Users
  128.  
  129. All GNU programs should have the following targets in their Makefiles:
  130.  
  131. @table @samp
  132. @item all
  133. Compile the entire program.  This should be the default target.  This
  134. target need not rebuild any documentation files; Info files should
  135. normally be included in the distribution, and DVI files should be made
  136. only when explicitly asked for.
  137.  
  138. @item install
  139. Compile the program and copy the executables, libraries, and so on to
  140. the file names where they should reside for actual use.  If there is a
  141. simple test to verify that a program is properly installed, this target
  142. should run that test.
  143.  
  144. The commands should create all the directories in which files are to be
  145. installed, if they don't already exist.  This includes the directories
  146. specified as the values of the variables @code{prefix} and
  147. @code{exec_prefix}, as well as all subdirectories that are needed.
  148. One way to do this is by means of an @code{installdirs} target
  149. as described below.
  150.  
  151. Use @samp{-} before any command for installing a man page, so that
  152. @code{make} will ignore any errors.  This is in case there are systems
  153. that don't have the Unix man page documentation system installed.
  154.  
  155. The way to install Info files is to copy them into @file{$(infodir)}
  156. with @code{$(INSTALL_DATA)} (@pxref{Command Variables}), and then run
  157. the @code{install-info} program if it is present.  @code{install-info}
  158. is a script that edits the Info @file{dir} file to add or update the
  159. menu entry for the given Info file; it will be part of the Texinfo package.
  160. Here is a sample rule to install an Info file:
  161.  
  162. @smallexample
  163. $(infodir)/foo.info: foo.info
  164. # There may be a newer info file in . than in srcdir.
  165. # Run install-info only if it exists.
  166. # Use `if' instead of just prepending `-' to the
  167. # line so we notice real errors from install-info.
  168.         -if test -f foo.info; then d=.; else d=$(srcdir); fi; \
  169.         $(INSTALL_DATA) $$d/foo.info $@@; \
  170.         if install-info --version >/dev/null 2>&1; then \
  171.           install-info --infodir=$(infodir) $$d/foo.info; \
  172.         else true; fi
  173. @end smallexample
  174.  
  175. @item uninstall
  176. Delete all the installed files that the @samp{install} target would
  177. create (but not the noninstalled files such as @samp{make all} would
  178. create).
  179.  
  180. @comment The gratuitous blank line here is to make the table look better
  181. @comment in the printed Make manual.  Please leave it in.
  182. @item clean
  183.  
  184. Delete all files from the current directory that are normally created by
  185. building the program.  Don't delete the files that record the
  186. configuration.  Also preserve files that could be made by building, but
  187. normally aren't because the distribution comes with them.
  188.  
  189. Delete @file{.dvi} files here if they are not part of the distribution.
  190.  
  191. @item distclean
  192. Delete all files from the current directory that are created by
  193. configuring or building the program.  If you have unpacked the source
  194. and built the program without creating any other files, @samp{make
  195. distclean} should leave only the files that were in the distribution.
  196.  
  197. @item mostlyclean
  198. Like @samp{clean}, but may refrain from deleting a few files that people
  199. normally don't want to recompile.  For example, the @samp{mostlyclean}
  200. target for GCC does not delete @file{libgcc.a}, because recompiling it
  201. is rarely necessary and takes a lot of time.
  202.  
  203. @item realclean
  204. Delete everything from the current directory that can be reconstructed
  205. with this Makefile.  This typically includes everything deleted by
  206. @code{distclean}, plus more: C source files produced by Bison, tags tables,
  207. Info files, and so on.
  208.  
  209. One exception, however: @samp{make realclean} should not delete
  210. @file{configure} even if @file{configure} can be remade using a rule in
  211. the Makefile.  More generally, @samp{make realclean} should not delete
  212. anything that needs to exist in order to run @file{configure}
  213. and then begin to build the program.
  214.  
  215. @item TAGS
  216. Update a tags table for this program.
  217.  
  218. @item info
  219. Generate any Info files needed.  The best way to write the rules is as
  220. follows:
  221.  
  222. @smallexample
  223. info: foo.info
  224.  
  225. foo.info: foo.texi chap1.texi chap2.texi
  226.         $(MAKEINFO) $(srcdir)/foo.texi
  227. @end smallexample
  228.  
  229. @noindent
  230. You must define the variable @code{MAKEINFO} in the Make